home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / cdc / src / cdrt.s < prev    next >
Text File  |  1997-03-29  |  30KB  |  1,286 lines

  1.  
  2. tr5s:
  3.     cmpi.w    #$40,d0
  4.     bcs    @f
  5.     moveq    #-1,d0    *コール無し
  6.     rte
  7. @@:    movem.l    d1-d7/a0-a6,-(sp)
  8.     add.w    d0,d0
  9.     add.w    d0,d0
  10.     lea    tr5tabs(pc),a6
  11.     movea.l    (a6,d0.w),a6
  12.     jsr    (a6)
  13.     movem.l    (sp)+,d1-d7/a0-a6
  14.     rte
  15.  
  16. *---------------------------------------------------
  17. *
  18. *    SYSTEM 関係
  19. *
  20.  
  21. tr5_00:    *--------------------------------------------
  22.     *_CDC_VERSION    equ    $00
  23.     *
  24.     *    ・ドライバーのバージョンチェック
  25.     *
  26.     *    [引  数]    なし
  27.     *    [戻り値]    d0.l = $0110
  28.     *
  29.     move.l    #$0110,d0
  30.     rts
  31.  
  32. tr5_01:    *--------------------------------------------
  33.     *_CDC_INIT    equ    $01
  34.     *
  35.     *    ・CD 及び ドライバーの初期化をする ([CLR]キー同等)
  36.     *
  37.     *    [引  数]    なし
  38.     *    [戻り値]    なし
  39.     *
  40.     *     演奏中止し、モードもクリアします。ただし、プログラムは残
  41.     *    ります。
  42.     *
  43.     *    [参  考] CD-ROM に対し REZEROUNIT を送りますので多少時間の
  44.     *        かかる場合があります。割り込み中など処理を早くした
  45.     *        い場合、_CDC_STOP を使用するといいでしょう。
  46.     *
  47.     jbsr    _ZeroUnit
  48.     jbsr    _CdcModeOn
  49.     clr.w    _AutoMode        *0:ノーマル 1:オート
  50.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  51.     clr.w    _LEDVMOD
  52.     bsr    _FlgClrS
  53.     bra    tr5_exsub
  54.  
  55.  
  56. *---------------------------------------------------
  57. *
  58. *    ワークアドレスゲット 関係
  59. *
  60.  
  61.  
  62. tr5_02:    *--------------------------------------------
  63.     *_CDC_STAT    equ    $02
  64.     *
  65.     *    ・CDの現在の状態の書かれたアドレスを返す
  66.     *
  67.     *    [引  数]    なし
  68.     *    [戻り値]    d0.l = ワークアドレス
  69.     *
  70.     *        offset
  71.     *        ( 0)    .dc.w    0;NoCD 1;SetCD
  72.     *        ( 2)    .dc.l    状態  0x11;演奏中,0x12;一時停止,0x13;停止
  73.     *        ( 6)    .dc.l    曲番号
  74.     *        (10)    .dc.l    演奏中の曲の経過時間 (MSF型)
  75.     *        (14)    .dc.l    CD絶対総 経過時間 (MSF型)
  76.     *        (18)    .dc.l    現在演奏曲のながさ (MSF型)
  77.     *        (22)    .dc.l    CD名アドレス
  78.     *        (26)    .dc.l    曲名アドレス
  79.     *        (30)    .dc.l    LED文字アドレス    -----以下LED部に表示される物
  80.     *        (34)    .dc.l    LED数値 曲番号
  81.     *        (38)    .dc.l    LED数値 1以上;プログラムナンバー
  82.     *                    0;表示無し -1;MAX= -2;INP= -3;Vol
  83.     *        (42)    .dc.l    LED数値 タイム (MSF型)
  84.     *        (46)    .dc.l    LEDの状態
  85.     *                    ┌bit 0 ■:停止
  86.     *                    │bit 1 >:再生
  87.     *                    │bit 2 ||:一時停止
  88.     *                   イズレカ│bit 3 >>:早送り
  89.     *                    └bit 4 <<:巻き戻し
  90.     *                    ┌bit 5 ⊂:オート
  91.     *                    └bit 6 ◯:リピート
  92.     *                      bit 7 R:ランダム
  93.     *                      bit 8 P:メモリー
  94.     *                     (bit 9 B:BGM)
  95.     *        (50)    .dc.b    入力されている数値(上)
  96.     *        (51)    .dc.b    入力されている数値(下)
  97.     *        (52)    .dc.w    LED数値 タイム のモード
  98.     *                    0;ノーマル
  99.     *                    1;リバース
  100.     *                    2;トータル
  101.     *                    3;トータルリバース
  102.     *        (54)    .dc.w    Vol数値
  103.     *        (56)    .dc.w    MasterVol数値(0ならボリューム機能無し)
  104.     *
  105.     *        表示 LED 文字アドレスは基本的に同じアドレスを返し
  106.     *        ます。内容が変わったかどうかは曲名アドレスを監視す
  107.     *        ることで可能です。
  108.     *
  109.     *     CDの現在の状態の書かれたアドレスを返します。アドレスは
  110.     *    固定されてますが、内容はトラップ時にのみ更新されるものもあ
  111.     *    ります。
  112.     *
  113.     *     基本的に読みだし専用です。
  114.     *
  115.     *    [参 考] CDC.x の機能が停止ているばあい同じ値を返します。
  116.     *        ( LED 文字アドレスも0の時もあります。)
  117.     *        _CDC_POWER($35)でチェックしてください。
  118.     *
  119.     lea    _plyinf-2(pc),a0
  120.     lea    _CHARBUF(pc),a1    *決まりadd
  121.     move.l    a1,30(a0)    */
  122.     lea    _CdName(pc),a1
  123.     move.w    _CDIN(pc),d0 *tst
  124.     bne    @f
  125.     lea    NullStr(pc),a1
  126. @@:    move.l    a1,22(a0)
  127.     move.w    _CDIN(pc),(a0)
  128.     moveq    #$13,d1
  129.     moveq    #0,d0
  130.     move.w    _TrkNo(pc),d0
  131.     move.l    d0,6(a0)
  132.     beq    @f
  133.     moveq    #$11,d1
  134.     move.w    _PauseMode(pc),d0 *tst
  135.     beq    @f
  136.     moveq    #$12,d1
  137. @@:    move.l    d1,2(a0)
  138.     move.l    a0,d0
  139.     rts
  140. NullStr:
  141.     .dc.b    0,0
  142.     .even
  143.  
  144. tr5_03:    *--------------------------------------------
  145.     *_CDC_TRACKS    equ    $03
  146.     *
  147.     *    ・CD-DA のCDの総合時間、曲数、曲の演奏時間、曲名の書かれ
  148.     *     たアドレスを返す
  149.     *
  150.     *    [引  数]    なし
  151.     *    [戻り値]    d0.l = 曲名リストワークアドレス
  152.     *
  153.     *        offset
  154.     *        ( 0)    .dc.w    0;NoCD 1;SetCD
  155.     *        ( 2)    .dc.l    CDC.xの最大記憶数(以下,記憶数)
  156.     *        ( 6)    .dc.l    CDの曲数
  157.     *        (10)    .dc.l    CDの全演奏時間
  158.     *        (14)    .dc.l    CDCLISTにあったか -1ならあった
  159.     *        (18)    .dcb.b    40,0        CD名        40-1文字
  160.     *        (58)    .dsb.b    (記憶数)*40    各曲の名前    40-1文字
  161.     *            .dsb.l    (記憶数)    各曲の演奏時間+拡張曲名flag
  162.     *            .dsb.l    (記憶数)    各曲のスタート時間
  163.     *                        (↑最上位ビットが立っ
  164.     *                        ていれば データトラック)
  165.     *
  166.     *     CD名、曲名以外の書き替えは禁止です。名前は変更可能です。
  167.     *
  168.     lea    _CdcTrak-2(pc),a0
  169.     move.w    _CDIN(pc),(a0)
  170.     move.l    a0,d0
  171.     rts
  172.  
  173.  
  174. *---------------------------------------------------
  175. *
  176. *    外部コントロール用 関係
  177. *
  178.  
  179.  
  180. tr5_04:    *--------------------------------------------
  181.     *_CDC_SCSI_CHK    equ    $04
  182.     *
  183.     *    ・SCSI の状態を返す
  184.     *
  185.     *    [引  数]    なし
  186.     *    [戻り値]    d0.l = 0 ; 使用可能
  187.     *                 < 0 ; 使用不可
  188.     *
  189.     *     TRAP #5 で SCSI を使用するものの場合このコールでチェック
  190.     *    してから使用してください。
  191.     *
  192.     tst.b    ScIocsSwc
  193.     bne    @f
  194.     *bsr    _scsi_cmd_chk
  195.     bsr    ScsiUseChk
  196.     bne    @f
  197.     moveq    #0,d0        *    beq    :使える
  198.     rts
  199. @@:
  200.     moveq    #-1,d0        *    bne    :つかえない
  201.     rts
  202.  
  203.  
  204.  
  205. tr5_05:    *--------------------------------------------
  206.     *_CDC_RELED    equ    $05
  207.     *
  208.     *    ・LED 部の書き直し、CD-ROM の状態を再チェック
  209.     *
  210.     *    [引  数]    なし
  211.     *    [戻り値]    なし
  212.     *
  213.     *     LED の書き直しを行います。TRAP #5 で CDC.x を操作した場
  214.     *    合すぐにLED部(_CDC_STAT のワークも含む)に表れないものがあ
  215.     *    ります。TIMER-C が生きている場合一秒(/Tによる)以内には書き
  216.     *    直されますが、このコールを使えばすぐに書き直されます。
  217.     *     TRAP#5を使わず外部で演奏開始等した場合もこのコールを呼べ
  218.     *    ば認識します。
  219.     *     また、入力された数値のキャンセルも行います。
  220.     *
  221.     *    [参 考] CDCコール番号の $1? はすぐに書き直されるようになっ
  222.     *        てます。
  223.     *
  224.     jbsr    _ChkCdRom
  225.     tst.w    _MastVol
  226.     beq    @f
  227.     jbsr    _NowVol
  228.     move.w    d0,_Volum
  229. @@:
  230.     tst.w    _CDIN
  231.     jbeq    1f
  232.     move.l    _plyinf,d0            *plyinf.fg
  233.     cmpi.b    #$11,d0
  234.     jbne    @f
  235.     move.l    _plyinf+4,d0            *plyinf.track_no;
  236.     move.w    d0,_TrkNo
  237.     move.w    d0,_TrkNoS
  238.     jbsr    _SetTrkLong
  239. @@:    jbsr    _MemChkT
  240. 1:
  241.     bra    _B_KLE_D
  242.  
  243. tr5_06:    *--------------------------------------------
  244.     moveq    #-1,d0    *コール無し
  245.     rts
  246.  
  247.  
  248. *---------------------------------------------------
  249. *
  250. *    キーコントロール 関係
  251. *
  252.  
  253.  
  254. tr5_07:    *--------------------------------------------
  255.     *_CDC_INKEY    equ    $07
  256.     *
  257.     *    ・CDCのキー割り込みルーチンを呼ぶ
  258.     *
  259.     *    [引  数]    d1.b = キーボードコード
  260.     *    [戻り値]    なし
  261.     *
  262.     *     キーボードのコードを送ることで CDC をコントロールする
  263.     *
  264.     *┌─┐┌─┐                  ┌─┬─┬─┐┌─┬─┬─┬─┐
  265.     *│  ││  │            ─┬──┐│  │  │  ││  │記│登│  │
  266.     *└─┘└─┘            ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
  267.     *┌─┬─┬            ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
  268.     *│ES│  │              │ BS ││HM│  │DL││CL│/│*│-│
  269.     *├─┴┬┴  ┬┴┬┴┬     ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
  270.     *│ TAB│    │E│R│     │[゚│    ││RU│RD│UN││7│8│9│+│
  271.     *├──┼    ┴┬┴┬┴     ┴┬┴┐ CR │├─┼─┼─┤├─┼─┼─┼─┤
  272.     *│                  │]ム│    ││  │↑│  ││4│5│6│=│
  273.     *                  ┴┬┴──┤│←├─┤→│├─┼─┼─┼─┤
  274.     *                │    ││  │↓│  ││1│2│3│  │
  275.     *                ┴┬──┘├─┴┬┴─┤├─┼─┼─┤EN│
  276.     *                  │      │    │    ││0│,│.│  │
  277.     *                ━┘      └──┴──┘└─┴─┴─┴─┘
  278.     *
  279.     *┌─┐┌─┐                  ┌─┬─┬─┐┌─┬─┬─┬─┐
  280.     *│  ││  │            ─┬──┐│  │  │  ││  │52│53│  │
  281.     *└─┘└─┘            ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
  282.     *┌─┬─┬            ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
  283.     *│01│  │              │ 0F ││36│  │37││3F│40│41│42│
  284.     *├─┴┬┴  ┬┴┬┴┬        ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
  285.     *│ 10 │    │13│14│        │1C│    ││38│39│3A││43│44│45│46│
  286.     *├──┼    ┴┬┴┬┴        ┴┬┴┐ 1D │├─┼─┼─┤├─┼─┼─┼─┤
  287.     *│                  │29│    ││  │3C│  ││47│48│49│4A│
  288.     *                  ┴┬┴──┤│3B├─┤3D│├─┼─┼─┼─┤
  289.     *                │    ││  │3E│  ││4B│4C│4D│  │
  290.     *                ┴┬──┘├─┴┬┴─┤├─┼─┼─┤4E│
  291.     *                  │      │    │    ││4F│50│51│  │
  292.     *                ━┘      └──┴──┘└─┴─┴─┴─┘
  293.     *
  294.     *            $3F    [CLR]        = CDC.x初期化
  295.     *            $4E    [ENT]        = 演奏
  296.     *            $4A    [=]        = PAUSE/RESUME
  297.     *            $3B/$3D    [←][→]    = 巻戻し/早送り
  298.     *            $38    [R-UP]        = 1曲戻し *
  299.     *            $39    [R-DN]        = 1曲送り
  300.     *            $3A    [UNDO]        = リピートモード
  301.     *
  302.     *        などキー操作と同じ。他に
  303.     *
  304.     *            $52    [記号入力]= 数値入力キャンセル。LEDの初期化にもなる
  305.     *                        (CDC_RELEDと同じ機能です。)
  306.     *
  307.     *        があります(キー操作では出来ないようになってます)。
  308.     *
  309.     *     演奏開始の場合等、他のコールと違うのは入力されている数値
  310.     *    に影響される点です。もしこのコールだけで指定の曲演奏したい
  311.     *    場合、まず、数値キーコードを送ってから演奏すれば可能です。
  312.     *
  313.     *     [←][→](サーチキー)を使う場合は、連続で送ったあと、最後
  314.     *    に 0 を送ってください。この時サーチ先から演奏されます。
  315.     *
  316.     *     $38は連続でコマンドを送ったりすることで動作が違うので単
  317.     *    純に、曲の頭から、1曲戻すと言う場合 _CDC_MVPLAY($13)を使
  318.     *    用してください。
  319.     *
  320.     *    [★注意]ver 1.06以前では
  321.     *            $42/$46    [-][+]    = 巻戻し/早送り
  322.     *        でした。。
  323.     *
  324.     move.l    d1,d0    *d0=キーボードコード
  325.     beq    @f
  326.     move.w    #1,KeySnsEM
  327.      bsr    KeySns
  328.     clr.w    KeySnsEM
  329.     rts
  330. @@:    move.l    _SeekNow(pc),d0 *tst
  331.     bmi    @f
  332.     move.w    #1,KeySnsEM
  333.      bsr    NokeySeek2
  334.     clr.w    KeySnsEM
  335. @@:    rts
  336.  
  337.  
  338. *---------------------------------------------------
  339. *
  340. *    プログラム関係
  341. *
  342.  
  343.  
  344. tr5_08:    *--------------------------------------------
  345.     *_CDC_PROG    equ    $08
  346.     *
  347.     *    ・CDCのプログラムワークアドレスを返す
  348.     *
  349.     *    [引  数]    なし
  350.     *    [戻り値]    d0.l = メモリワークアドレス
  351.     *
  352.     *        ( 0)    .dc.w    プログラム数
  353.     *        ( 2)    .ds.b    256,曲ナンバー列
  354.     *
  355.     *     プログラムの直接書き替えも可能。ただし、書き替えたあとも
  356.     *    う一度 _CDC_PROG をコールすること。プログラムを全部消去し
  357.     *    たい場合、プログラム数を0に書き替えることで可能。
  358.     *
  359.     *    [★注意]ver 1.08以前では
  360.     *            ( 2)    .ds.b    100,曲ナンバー列
  361.     *        でした。。
  362.     *
  363.     moveq    #0,d0
  364.     bsr    _MemChkT
  365.     lea    _MemLong(pc),a0
  366.     move.l    a0,d0
  367.     rts
  368.  
  369. tr5_09:    *--------------------------------------------
  370.     *_CDC_PROGIN    equ    $09
  371.     *
  372.     *    ・指定曲ナンバーをプログラムに記憶する
  373.     *
  374.     *    [引  数]    d1.l = 曲ナンバー
  375.     *                 = -1 ; 現在プログラムされている数のみ返す
  376.     *            d2.l = プログラムナンバー (0~)
  377.     *                 = -1 ;プログラムの最後に追加します ([.])
  378.     *    [戻り値]    d0.l = 現在プログラムされている数 ; 正常終了
  379.     *                 < 0 ; エラー(プログラム最大数を越える)
  380.     *
  381.     tst.l    d1
  382.     bmi    tr5_09E    *d1=-1
  383.     tst.l    d2
  384.     bmi    tr5_09M
  385.     cmpi.l    #PrgMax,d2
  386.     bcs    @f
  387.     moveq    #-1,d0    *d2がおかしい
  388.     rts
  389. @@:
  390.     lea    _MemSock(pc),a1
  391.     move.b    d1,0(a1,d2.w)
  392.     bra    tr5_09E
  393. tr5_09M:
  394.         *d2=-1
  395.     move.w    _MemLong(pc),d0
  396.     cmpi.w    #PrgMax-1,d0
  397.     bcs    @f
  398.     moveq    #-1,d0    *これ以上はいらない
  399.     rts
  400. @@:
  401.     lea    _MemSock(pc),a1
  402.     move.b    d1,0(a1,d0.w)
  403.     addq.w    #1,_MemLong
  404. tr5_09E:
  405.     bsr    _MemChkT
  406.     moveq    #0,d0
  407.     move.w    _MemLong(pc),d0
  408.     rts
  409.  
  410. tr5_0a:    *--------------------------------------------
  411.     *_CDC_PROGOUT    equ    $0A
  412.     *
  413.     *    ・最後のプログラムの曲をプログラムから消す
  414.     *
  415.     *    [引  数]    なし
  416.     *    [戻り値]    d0.l = 現在プログラムされている数 ; 正常終了
  417.     *                 < 0 ; エラー
  418.     *
  419.     move.w    _MemLong(pc),d0 *tst
  420.     bne    @f
  421.     moveq    #-1,d0
  422.     rts
  423. @@:    subq.w    #1,_MemLong        *メモリながさ 0以外ならMEMORY
  424.     bsr    _MemChkT
  425.     moveq    #0,d0
  426.     rts
  427.  
  428. tr5_0b:    *--------------------------------------------
  429. tr5_0c:    *--------------------------------------------
  430. tr5_0d:    *--------------------------------------------
  431. tr5_0e:    *--------------------------------------------
  432.     moveq    #-1,d0    *コール無し
  433.     rts
  434.  
  435. tr5_0f:    *--------------------------------------------
  436.     *_CDC_PROGTIME    equ    $0F
  437.     *
  438.     *    ・プログラムされた曲の総演奏時間を計算する
  439.     *
  440.     *    [引  数]    なし
  441.     *    [戻り値]    d0.l = ワークアドレス
  442.     *
  443.     *        ( 0)    .dc.l    演奏予定総長さ
  444.     *        ( 4)    .dc.l    演奏された曲の合計長さ
  445.     *
  446.     *     プログラムされて曲の合計と演奏された曲の合計長さを返しま
  447.     *    す。ただし、演奏されていない時は0,0がかえります。演奏中
  448.     *    にプログラムの変更があると数値がおかしくなることがあります
  449.     *    (変更されない)。
  450.     *
  451.     *    [参 考]ランダム演奏時にも、ノーマル時にも有効。
  452.     *        意味がないので、そのうち消えるかも知れないコール
  453.     *        使用禁止 ^^;
  454.     *
  455.     move.l    #tr5_0fwrk,-(sp)
  456.     jbsr    _ProgTimeCalc
  457.     addq.l    #4,sp
  458.     move.l    #tr5_0fwrk,d0
  459.     rts
  460. tr5_0fwrk:
  461.     .dc.l    0
  462.     .dc.l    0
  463.  
  464. *---------------------------------------------------
  465. *
  466. *    演奏関係
  467. *
  468.  
  469.  
  470. tr5_10:    *--------------------------------------------
  471.     *_CDC_PLAY    equ    $10
  472.     *
  473.     *    ・曲ナンバー指定によりノーマル演奏開始
  474.     *
  475.     *    [引  数]    d1.l = 開始曲ナンバー (0ならCDC管理演奏)
  476.     *            d2.l = 終了曲ナンバー (-1なら最後まで)
  477.     *    [戻り値]    d0.l = 0 ; 正常終了
  478.     *                 < 0 ; エラー
  479.     *
  480.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  481.     clr.w    _ReptMode    *0:ノーマル 1:リピート
  482.     clr.w    _BgmMode    *0:ノーマル 1:BGM
  483.  
  484.     tst.l    d1
  485.     bne    @f
  486.     bsr    _ChkCdRom
  487.     bsr    Tent_sub
  488.     bra    tr5_exsub
  489.  
  490. @@:    move.l    d2,-(sp)
  491.     move.l    d1,-(sp)
  492.      bsr    _ChkCdRom
  493.     bsr    _CdPlay_hf
  494.     addq    #8,sp
  495.     tst.l    d0
  496.     bpl    @f
  497.     rts
  498. @@:
  499.     moveq    #0,d0
  500.     bra    tr5_exsub
  501.  
  502. tr5_11:    *--------------------------------------------
  503.     *_CDC_PAUSE    equ    $11
  504.     *
  505.     *    ・CD演奏の一時停止。演奏していない場合何もしない
  506.     *
  507.     *    [引  数]    なし
  508.     *    [戻り値]    なし
  509.     *
  510.     bsr    _ChkCdRom
  511.     bsr    _StpDsk
  512.     move.w    #-1,_PauseMode    *0:特に 1:ポーズ中
  513.     bra    tr5_exsub
  514.  
  515. tr5_12:    *--------------------------------------------
  516.     *_CDC_RESUME    equ    $12
  517.     *
  518.     *    ・CD演奏の一時停止の解除。演奏中は何もしない
  519.     *
  520.     *    [引  数]    なし
  521.     *    [戻り値]    なし
  522.     *
  523.     bsr    _ChkCdRom
  524.     bsr    _Resume
  525.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  526.     bra    tr5_exsub
  527.  
  528. tr5_13:    *--------------------------------------------
  529.     *_CDC_MVPLAY    equ    $13
  530.     *
  531.     *    ・CD演奏の曲を変える
  532.     *
  533.     *    [引  数]    d1.l = 現在演奏中の曲からの ±値 (-1~1)
  534.     *    [戻り値]    d0.l = 0 ; 正常終了
  535.     *                 < 0 ; エラー
  536.     *
  537.     *     0を指定することで演奏中の曲を最初から。プログラムされて
  538.     *    いる場合、プログラム順に曲を移動、演奏します。ランダムモー
  539.     *    ド時は、どの曲にいくか判りません。
  540.     *
  541.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  542.     move.l    d1,-(sp)
  543.      bsr    _ChkCdRom
  544.     move.w    #1,_PlayScMd
  545.     bsr    _CdPlay_restart
  546.     addq    #4,sp
  547.     bra    tr5_exsub
  548.  
  549. tr5_14:    *--------------------------------------------
  550.     *_CDC_BGM    equ    $14
  551.     *
  552.     *    ・指定アドレス間を繰り返し演奏する(BGMモード演奏)
  553.     *
  554.     *    [引  数]    d1.l = 開始トラックor開始アドレス
  555.     *            d2.l = 終了アドレス    (0ならその曲の最後の数値)
  556.     *            d3.l = ループアドレス    (0ならd1と同じ値に)
  557.     *                        (-1なら一度演奏で終わり)
  558.     *            d4.l = ループ終了アドレス(0ならd2と同じ値に)
  559.     *    [戻り値]    d0.l = 0 ; 正常終了
  560.     *                 < 0 ; エラー
  561.     *
  562.     *     d1.l は $100 未満であればトラック指定になります。
  563.     *     d1.l が $100 以上であればアドレス指定になります。
  564.     *
  565.     *    _CDC_MODE の戻り値が bit4;BGMが立ちます
  566.     *
  567.     *    [参  考] 基本的に BGMとして CD を使う場合のコールなので
  568.     *        LED部にBGMモードとは表示されません。
  569.     *        使う場合、キーボードからのコントロールを殺したほう
  570.     *        がいいでしょう。
  571.     *                ZCDC.x で使用してます。
  572.     *
  573.     clr.w    _PauseMode        *0:特に 1:ポーズ中
  574.     tst.l    d3
  575.     bne    @f
  576.     move.l    d1,d3
  577.     andi.l    #$00FFFFFF,d3
  578. @@:
  579.     tst.l    d4
  580.     bne    @f
  581.     move.l    d2,d4
  582.     andi.l    #$00FFFFFF,d4
  583. @@:
  584.     move.l    d4,_BgmEdAdds
  585.     move.l    d3,_BgmStAdds
  586.     move.l    d2,-(sp)
  587.     move.l    d1,-(sp)
  588.      bsr    _ChkCdRom
  589.      bsr    _FlgClrS
  590.      clr.w    _AutoMode        *0:ノーマル 1:オート
  591.      clr.w    _RndMode        *0:ノーマル 1:ランダム
  592.     bsr    _CdPlay_hf
  593.     addq    #8,sp
  594.     tst.l    d0
  595.     bpl    @f
  596.     rts
  597. @@:
  598.     move.w    #-1,_BgmMode        *0:ノーマル 1:BGM
  599.     *bsr    _MemChkT
  600.     moveq    #0,d0
  601.     bra    tr5_exsub
  602.  
  603. tr5_15:    *--------------------------------------------
  604.     *_CDC_STOP    equ    $15
  605.     *
  606.     *    ・CD演奏を停止する
  607.     *
  608.     *    [引  数]    なし
  609.     *    [戻り値]    なし
  610.     *
  611.     *     _CDC_INIT に比べ高速です。割り込み中など処理が止まるのを
  612.     *    避けたい場合のみ使用してください。CDC.x 内部では「停止」に
  613.     *    なりますが、CD-ROM自体の状態は一時停止になっています。また、
  614.     *    LED の書き替えもすぐに行われません。
  615.     *
  616.     bsr    _ChkCdRom
  617.     bsr    _StpDsk
  618.     clr.w    _AutoMode        *0:ノーマル 1:オート
  619.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  620.     bsr    _FlgClrS
  621.     bra    tr5_exsub
  622.  
  623. tr5_16:    *--------------------------------------------
  624. tr5_17:    *--------------------------------------------
  625. tr5_18:    *--------------------------------------------
  626. tr5_19:    *--------------------------------------------
  627. tr5_1a:    *--------------------------------------------
  628. tr5_1b:    *--------------------------------------------
  629. tr5_1c:    *--------------------------------------------
  630.     moveq    #-1,d0    *コール無し
  631.     rts
  632.  
  633. tr5_1d:    *--------------------------------------------
  634.     *_CDC_PLAYWAIT    equ    $1D
  635.     *
  636.     *    ・演奏開始後、ステイタス待ちをする( /PM 使用時対策用)
  637.     *
  638.     *    [引  数]    なし
  639.     *    [戻り値]    なし
  640.     *
  641.     *     /PM 使用時、演奏開始を待たずに次の作業に移ります。が、タ
  642.     *    イミングを取るためにはこれではまずい場合があります(ゲーム
  643.     *    のBGMなど)。その時、これを実行します。演奏開始するまで待ち
  644.     *    ます。
  645.     *     /PM 使用していない場合や、演奏開始状態でない場合は無視さ
  646.     *    れます。
  647.     *
  648.     bra    _scsi_cmd_chk
  649.  
  650. tr5_1e:    *--------------------------------------------
  651.     *_CDC_VOL    equ    $1E
  652.     *
  653.     *    ・ボリュームを変更する
  654.     *
  655.     *    [引  数]    d1.l = 0~255 ; ボリュームを指定
  656.     *                 = -1     ; 現在のボリューム値を返す
  657.     *    [戻り値]    d0.l = 現在のボリューム値
  658.     *                 = -1 ; ボリューム非対応,エラー
  659.     *
  660.     *
  661.     *    [参  考] マスターボリュームは _CDC_STAT で確認出来ます。
  662.     *
  663.     tst.w    _MastVol
  664.     beq    2f
  665.     tst.l    d1
  666.     bmi    1f
  667.     *======ボリューム指定
  668.     cmpi.l    #255+1,d1
  669.     bcc    2f
  670.     moveq    #0,d0
  671.     move.w    _Volum,d0
  672.     move.l    d0,-(sp)
  673.      move.w    d1,_Volum
  674.      move.l    d1,-(sp)
  675.      jbsr    _ChnVol
  676.      addq.l    #4,sp
  677.     move.l    (sp)+,d0
  678.     rts
  679. 1:    *======現在の値のみ
  680.     moveq    #0,d0
  681.     move.w    _Volum,d0
  682.     rts
  683. 2:    *======エラー
  684.     moveq    #-1,d0    *コール無し
  685.     rts
  686.  
  687. tr5_1f:    *--------------------------------------------
  688.     *_CDC_FADEOUT    equ    $1F
  689.     *
  690.     *    ・演奏をフェードアウトする。
  691.     *
  692.     *    [引  数]    d1.l = 0      ; フェードアウト開始
  693.     *                 = 1~255 ; フェードアウトの速度指定
  694.     *                 = -1     ; 現在のフェードアウト速度を返す
  695.     *    [戻り値]    d0.l = 現在のフェードアウト速度
  696.     *                 = -1 ; フェードアウトが出来ない。
  697.     *                 = -2 ; 既にフェードアウト始めている。
  698.     *
  699.     tst.w    _MastVol
  700.     beq    2f
  701.     tst.l    d1
  702.     bne    1f
  703.     *======フェードアウト開始
  704.     tst.w    _Fadeouting
  705.     beq    @f
  706.         **既にfadeoutしている
  707.     moveq    #-2,d0
  708.     rts
  709. @@:        **fadeout開始
  710.     move.w    _Volum,_FadeoutVol    * フェードアウト中のボリューム
  711.     move.w    #1,_Fadeouting
  712.     moveq    #0,d0
  713.     move.w    _FadeoutDec,d0
  714.     rts
  715. 1:
  716.     bmi    1f
  717.     *======フェードアウトの速度指定
  718.     moveq    #0,d0
  719.     move.w    _FadeoutDec,d0
  720.     move.w    d1,_FadeoutDec
  721.     rts
  722. 1:    *======現在のフェードアウト速度を返す
  723.     moveq    #0,d0
  724.     move.w    _FadeoutDec,d0
  725.     rts
  726. 2:    *======エラー
  727.     moveq    #-1,d0    *コール無し
  728.     rts
  729.  
  730.  
  731. tr5_20:    *--------------------------------------------
  732. tr5_21:    *--------------------------------------------
  733. tr5_22:    *--------------------------------------------
  734. tr5_23:    *--------------------------------------------
  735. tr5_24:    *--------------------------------------------
  736. tr5_25:    *--------------------------------------------
  737. tr5_26:    *--------------------------------------------
  738. tr5_27:    *--------------------------------------------
  739. tr5_28:    *--------------------------------------------
  740. tr5_29:    *--------------------------------------------
  741. tr5_2a:    *--------------------------------------------
  742. tr5_2b:    *--------------------------------------------
  743. tr5_2c:    *--------------------------------------------
  744. tr5_2d:    *--------------------------------------------
  745. tr5_2e:    *--------------------------------------------
  746. tr5_2f:    *--------------------------------------------
  747.     moveq    #-1,d0    *コール無し
  748.     rts
  749.  
  750.  
  751. *---------------------------------------------------
  752. *
  753. *    CDC DRIVE MODE 関係
  754. *
  755.  
  756.  
  757. tr5_30:    *--------------------------------------------
  758.     *_CDC_DRIVE    equ    $30
  759.     *
  760.     *    ・CDCの心臓を動かす
  761.     *
  762.     *    [引  数]    なし
  763.     *    [戻り値]    なし
  764.     *
  765.     *     TIMER-Cを乗っ取っていると、CDCが動きません。が、直接ある
  766.     *    一定期でこれをコールすれば大丈夫です。
  767.     *
  768.     *    [参 考] MUTERMモード対応にも対応してます。が、使用するこ
  769.     *        とはないでしょう。
  770.     *
  771.     move.w    _ScscUse(pc),d0 *tst
  772.     beq    @f
  773.     rts
  774. @@:    move.w    $0a0e.w,d1        *現在処理中のIOCSコール番号(なければ-1)
  775.     cmpi.w    #$F5,d1
  776.     bne    @f
  777.     rts
  778. @@:
  779.     move.l    #-1,_cps_ot        ****
  780.  
  781.     move.w    _MuTmMod(pc),d0 *tst    *0:ノーマル 1:強引にキーベクタを書き替え
  782.     bne    @f
  783.      bsr    LoopChk_
  784.      bsr    _WaitCC2    *-----------------------------[演奏用間隔]
  785.     rts
  786.  
  787. @@:            *MUTERMモード
  788.     move.l    MFP_BAK(pc),d0 *tst
  789.     bne    tr5_30L
  790.     move.l    MFP_,d1
  791.     cmp.l    #MFP,d1
  792.     beq    @f
  793.     move.l    MFP_JMP+2(pc),MFP_BAK
  794.     move.l    MFP_,MFP_JMP+2
  795.     move.l    #MFP2,MFP_
  796. @@:    bra    tr5_30E
  797. tr5_30L:
  798.     move.l    MFP_,d1
  799.     cmp.l    #MFP2,d1
  800.     beq    @f
  801.     move.l    MFP_BAK(pc),MFP_JMP+2
  802.     move.l    #MFP,MFP_
  803.     clr.l    MFP_BAK
  804. @@:    *bra    tr5_30E
  805.  
  806. tr5_30E
  807.     move.w    MFP_cmd(pc),d0 *tst
  808.     bne    @f
  809.     bsr    NokeySeek
  810.     bra    tr5_30EE
  811. @@:
  812.     move.w    #1,IocsSwc
  813.     move.w    MFP_cmd(pc),d0
  814.     move.w    MFP_cmd+2(pc),MFP_cmd
  815.     clr.w    MFP_cmd+2
  816.     bsr    KeySns
  817. tr5_30EE:
  818.     bsr    LoopChk
  819.     clr.w    IocsSwc
  820.     rts
  821.  
  822. MFP2:    bra    MFP
  823.  
  824.  
  825. tr5_31:    *--------------------------------------------
  826.     *_CDC_MODE    equ    $31
  827.     *
  828.     *    ・CDCの演奏モードを設定(トグル)
  829.     *
  830.     *    [引  数]    d1.l = モード
  831.     *                 =  0 ; オート
  832.     *                 =  1 ; リピート
  833.     *                 =  2 ; ランダム
  834.     *                 = -1 ; モードののみ返す
  835.     *    [戻り値]    d0.l = 現在のモード ; 正常終了
  836.     *        現在のモードは
  837.     *                bit0 :オート
  838.     *                bit1 :リピート
  839.     *                bit2 :ランダム
  840.     *                bit3 :メモリー
  841.     *                [bit4 :BGM]
  842.     *
  843.     *     設定は _CDC_INKEY($7)でそれぞれのキーコードを、送った時
  844.     *    を同じ処理をします(ただし入力数字は無視されます)ので、場合
  845.     *    により演奏開始されます。
  846.     *
  847.     *     モード変更はトグルで行われるので一度モードを調べてから設
  848.     *    定したほうがいいでしょう。
  849.     *
  850.     move.l    d1,-(sp)
  851.     moveq    #0,d0
  852.     move.w    _AutoMode(pc),d1    *0:ノーマル 1:オート
  853.     beq    @f
  854.     ori.w    #%00001,d0
  855. @@:    move.w    _ReptMode(pc),d1    *0:ノーマル 1:リピート
  856.     beq    @f
  857.     ori.w    #%00010,d0
  858. @@:    move.w    _RndMode(pc),d1        *0:ノーマル 1:ランダム
  859.     beq    @f
  860.     ori.w    #%00100,d0
  861. @@:    move.w    _MemLong(pc),d1        *メモリながさ 0以外ならMEMORY
  862.     beq    @f
  863.     ori.w    #%01000,d0
  864. @@:    move.w    _BgmMode(pc),d1        *0:ノーマル 1:BGM
  865.     beq    @f
  866.     ori.w    #%10000,d0
  867. @@:
  868.     move.l    (sp)+,d1
  869.     bpl    @f
  870.     rts
  871. @@:    move.l    d0,-(sp)
  872.     subq.w    #1,d1
  873.     bpl    @f
  874.         *0*
  875.     clr.w    _DisSuuzi10        * LED用数字クリア
  876.     bsr    Tauto        *オート
  877.     bra    tr5_31E
  878. @@:
  879.     bne    @f
  880.         *1*
  881.     clr.w    _DisSuuzi10        * LED用数字クリア
  882.     bsr    Tundo        *リピート
  883.     bra    tr5_31E
  884. @@:
  885.     subq.w    #1,d1
  886.     bne    @f
  887.         *2*
  888.     bsr    Trnd        *ランダム
  889.     *bra    tr5_31E
  890. @@:
  891. tr5_31E:
  892.     move.l    (sp)+,d0
  893.     rts
  894.  
  895. tr5_32:    *--------------------------------------------
  896.     *_CDC_KEYMODE    equ    $32
  897.     *
  898.     *    ・CDCのキー操作関係のモードを設定
  899.     *
  900.     *    [引  数]    d1.l = モード
  901.     *                 0 ; 一切受け付けない (-KS)
  902.     *                 1 ; 受け付ける
  903.     *                -1 ; 現在のモードのみ返す
  904.     *    [戻り値]    d0.l = 前のモード ; 正常終了
  905.     *
  906.     moveq    #0,d0
  907.     move.w    _KeySwi(pc),d0        *1;キー入力可能 0;不可能
  908.     tst.l    d1
  909.     bpl    @f
  910.     rts
  911. @@:
  912.     move.w    d1,_KeySwi
  913.     rts
  914.  
  915. tr5_33:    *--------------------------------------------
  916.     *_CDC_LED    equ    $33
  917.     *
  918.     *    ・CDCのLEDの表示モードを設定する
  919.     *
  920.     *    [引  数]    d1.l =  0 ; 非表示モード
  921.     *                    1 ; 表示モード
  922.     *                    2 ; 左部のみ表示モード
  923.     *                 = -1 ; 現在の値
  924.     *    [戻り値]    d0.l = 前のモード ; 正常終了
  925.     *                 < 0 ; エラー
  926.     *
  927.     *     表示モードにしてもTEXTが使われていると表示されません
  928.     *
  929.     *    [参 考] Trapコールで強制LED表示モードはありません
  930.     *
  931.     *    [★注意]ver 1.06以前では
  932.     *            [引  数]    d1.l =  1 ; 非表示モード
  933.     *                            0 ; 表示モード
  934.     *        でした。。
  935.     *
  936.     moveq    #0,d0
  937.     move.w    _DisMode(pc),d0
  938.     andi.l    #$03,d0
  939.     tst.l    d1
  940.     bpl    @f
  941.     rts
  942. @@:
  943.     beq    1f
  944.     cmpi.l    #1,d1
  945.     beq    2f
  946.     move.l    d0,-(sp)
  947.     bsr    FnkBerChk
  948.     beq    @f
  949.     bsr    KillLeds
  950. @@:    move.l    (sp)+,d0
  951.     move.w    #2,_DisMode            *0;非表示 1;表示 2;Small表示
  952.     rts
  953. 2:
  954.     move.w    #1,_DisMode            *0;非表示 1;表示 2;Small表示
  955.     rts
  956. 1:
  957.     move.l    d0,-(sp)
  958.     bsr    FnkBerChk
  959.     beq    @f
  960.     bsr    KillLeds
  961. @@:    move.l    (sp)+,d0
  962.     clr.w    _DisMode            *0;非表示 1;表示 2;Small表示
  963.     rts
  964.  
  965. tr5_34:    *--------------------------------------------
  966.     *_CDC_TIMING    equ    $34
  967.     *
  968.     *    ・CDチェックする間隔設定(基本的に使用禁止)
  969.     *
  970.     *    [引  数]    d1.w =  1/100s単位
  971.     *                 = -1 ; 現在の値
  972.     *    [戻り値]    d0.w = 前の値(単位1/100s) ; 正常終了
  973.     *                 < 0 ; エラー
  974.     *
  975.     *     間隔チェックには IOCS の TIMER-C のワークを見ているので
  976.     *    TIMER-C を変更している場合、意味がありません。
  977.     *
  978.     moveq    #0,d0
  979.     move.w    _PlyWitT(pc),d0
  980.     swap    d0
  981.     move.w    _KeyTDCT(pc),d0
  982.     tst.l    d1
  983.     bpl    @f
  984.     rts
  985. @@:
  986.     tst.w    d1
  987.     bne    @f
  988.     moveq    #-1,d0
  989.     rts
  990. @@:    move.l    d0,-(sp)
  991.     move.l    d1,d0
  992.     jbsr    _SetKeyTDCT    *move.w    d0,_KeyTDCT
  993.     move.l    (sp)+,d0
  994.     rts
  995.  
  996. tr5_35:    *--------------------------------------------
  997.     *_CDC_POWER    equ    $35
  998.     *
  999.     *    ・CDC の機能を制御
  1000.     *
  1001.     *    [引  数]    d1.l =  1 ; 機能する
  1002.     *                 =  0 ; 停止する ([ESC])
  1003.     *                 = -1 ; 現在の値
  1004.     *    [戻り値]    d0.l = 前の値 ; 正常終了
  1005.     *                 < 0 ; エラー
  1006.     *
  1007.     *     機能を停止しても trap #5 での操作も可能ですが、_CDC_DRIVE
  1008.     *    を常用する必要があります。
  1009.     *
  1010.     moveq    #0,d0
  1011.     move.w    _CdcMode(pc),d0
  1012.     andi.l    #$01,d0
  1013.     tst.l    d1
  1014.     bpl    @f
  1015.     rts
  1016. @@:
  1017.     jbne    _CdcModeOn
  1018. @@:
  1019.     move.l    d0,-(sp)
  1020.     bsr    FnkBerChk
  1021.     beq    @f
  1022.     bsr    KillLeds
  1023. @@:    move.l    (sp)+,d0
  1024.     clr.w    _CdcMode    *0:停止中
  1025.     clr.w    _CDIN        *0:CDは入っていない 1:入っている
  1026.     clr.b    _CHARBUF    *LED文字
  1027.     rts
  1028.  
  1029. tr5_36:    *--------------------------------------------
  1030.     *_CDC_TRACKMODE    equ    $36
  1031.     *
  1032.     *    ・トラック記憶モードを変える(演奏も停止します)。
  1033.     *
  1034.     *    [引  数]    d1.l =  0 ; タイトルリストファイルを参照、
  1035.     *                 拡張トラック設定
  1036.     *                 =  1 ; 拡張トラック設定解除
  1037.     *    [戻り値]    なし
  1038.     *
  1039.     *     タイトルリストファイルからの登録を行います。タイトルリス
  1040.     *    トファイルを変更した時これを実行すれば読み込んでくれます。
  1041.     *
  1042.     *     ジュークボックスモード時は使用禁止です、
  1043.     *
  1044.     *    [参 考] d1.l==1 は主にZCDC.xで使用します。普通の音楽演奏の
  1045.     *        場合は意味がないでしょう。
  1046.     *
  1047.     tst.l    d1
  1048.     bne    @f
  1049.     jbsr    _ZeroUnit
  1050.     clr.w    _AutoMode        *0:ノーマル 1:オート
  1051.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  1052.     bsr    _FlgClrS
  1053.     bsr    _ChkCdRom
  1054.     bsr    _CdListRead
  1055.     rts
  1056. @@:
  1057.     jbsr    _ZeroUnit
  1058.     clr.w    _AutoMode        *0:ノーマル 1:オート
  1059.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  1060.     bsr    _FlgClrS
  1061.     bsr    _CdListSub
  1062.     rts
  1063.  
  1064. tr5_37:    *--------------------------------------------
  1065.     *_CDC_KEYCANSEL    equ    $37
  1066.     *
  1067.     *    ・CDCのキー操作無効を個別に設定
  1068.     *
  1069.     *    [引  数]    d1.l = 無効にするキーボードコード
  1070.     *                 = -1 ; 全てもとに戻す
  1071.     *    [戻り値]    なし
  1072.     *
  1073.     *     アプリでキーボードからのコントロールが困る物がある場合、
  1074.     *    特定のキーのみ無効に出来ます。アプリ終了時もとに戻すこと。
  1075.     *
  1076.     *    [参 考] スイッチ -B[n]でも、もとに戻すことが出来ます。
  1077.     *
  1078.     tst.l    d1
  1079.     bpl    tr5_31L
  1080.     move.l    CmdC_ListD(pc),CmdC_List
  1081.     move.l    CmdC_ListD+4(pc),CmdC_List+4
  1082.     move.l    CmdC_ListD+8(pc),CmdC_List+8
  1083.     move.l    CmdC_ListD+12(pc),CmdC_List+12
  1084.     rts
  1085. tr5_31L:
  1086.     move.l    d1,d0
  1087.     andi.l    #$FFFF_FF80,d0
  1088.     beq    @f
  1089.     rts    **エラー
  1090. @@:    move.w    d1,d0
  1091.     lsr.w    #3,d0
  1092.     lea    CmdC_List(pc),a0
  1093.     bclr.b    d1,(a0,d0.w)
  1094.     rts
  1095.  
  1096. tr5_38:    *--------------------------------------------
  1097.     *_CDC_TIMELED    equ    $38
  1098.     *
  1099.     *    ・CDCのTIMEのLEDの表示モードを設定する
  1100.     *
  1101.     *    [引  数]    d1.l =  0 ; ノーマル
  1102.     *                    1 ; リバース
  1103.     *                    2 ; トータル
  1104.     *                    3 ; トータルリバース
  1105.     *                 = -1 ; 現在の値
  1106.     *    [戻り値]    d0.l = 前のモード ; 正常終了
  1107.     *                 < 0 ; エラー
  1108.     *
  1109.     moveq    #0,d0
  1110.     move.w    _LEDTMRV(pc),d0
  1111.     tst.l    d1
  1112.     bpl    @f
  1113.     rts
  1114. @@:
  1115.     andi.w    #3,d1
  1116.     move.w    d1,_LEDTMRV
  1117.     bra    tr5_exsub
  1118.  
  1119. tr5_39:    *--------------------------------------------
  1120.     *_CDC_LEDXY    equ    $39
  1121.     *
  1122.     *    ・CDCのLEDの座標を得る
  1123.     *
  1124.     *    [引  数]    なし
  1125.     *    [戻り値]    d0.wh = X座標
  1126.     *            d0.wl = Y座標
  1127.     *
  1128.     *    [★注意]ver 1.08以降新規です。
  1129.     *
  1130.     move.l    _DRAWADDS,d0
  1131.     move.l    d0,d1
  1132.     andi.l    #$7F,d0
  1133.     swap    d0
  1134.     lsr.l    #7,d1    * /128
  1135.     lsr.l    #4,d1    * /16
  1136.     andi.w    #$3F,d1
  1137.     move.w    d1,d0
  1138.     rts
  1139.  
  1140. tr5_3a:    *--------------------------------------------
  1141.     *_CDC_SCSIID    equ    $3a
  1142.     *
  1143.     *    ・CDCの管理しているSCSI-ID(LUN)を得る
  1144.     *
  1145.     *    [引  数]    なし
  1146.     *    [戻り値]    d0.wh = LUN
  1147.     *            d0.wl = ID
  1148.     *
  1149.     *    [★注意]ver 1.09以降新規です。
  1150.     *
  1151.     move.l    _SCSI_IDF,d0
  1152.     andi.l    #$00FFFFFF,d0
  1153.     rts
  1154.  
  1155. tr5_3b:    *--------------------------------------------
  1156.     *_CDC_EJEEMU    equ    $3b
  1157.     *
  1158.     *    ・CDCの管理しているSCSI機器が一度エジェクトされた事にする
  1159.     *
  1160.     *    [引  数]    なし
  1161.     *    [戻り値]    なし
  1162.     *
  1163.     *    [★注意]ver 1.09以降新規です。
  1164.     *
  1165.     bra    _EJE_EMU
  1166.  
  1167. tr5_3c:    *--------------------------------------------
  1168.     *_CDC_CHGLUN    equ    $3c
  1169.     *
  1170.     *    ・LUNを切り換える
  1171.     *
  1172.     *    [引  数]    d1.l =  LUN (0~7)
  1173.     *                 = -1 ; 現在の値
  1174.     *    [戻り値]    d0.l = LUN (0~7) ; 正常終了
  1175.     *                 = 100 ; ジュークボックスモード
  1176.     *                 < 0 ; エラー
  1177.     *
  1178.     *     LUNを切り換えます。切り換えたと同時にタイトルリストファ
  1179.     *    イルからの登録も行います。
  1180.     *
  1181.     *    [★注意]ver 1.09以降新規です。
  1182.     *
  1183.     moveq    #0,d0
  1184.     move.w    _SCSI_LUN__,d0
  1185.     tst.l    d1
  1186.     bpl    1f
  1187.     *======-1 なら今の値
  1188.     tst.w    _JukeBox            *0:ノーマル 1:JukeBox
  1189.     beq    @f
  1190.     moveq    #100,d0
  1191. @@:    rts
  1192. 1:
  1193.     *====== 現在の LUN チェック
  1194.     tst.w    _JukeBox            *0:ノーマル 1:JukeBox
  1195.     bne    @f
  1196.     cmp.w    d0,d1
  1197.     bne    @f            *JUKE BOX でなく LUN が同じならそのまま
  1198.     rts
  1199. @@:
  1200.     cmpi.w    #8,d1
  1201.     bcs    @f
  1202.     moveq    #-1,d0    *8以上ならエラー
  1203.     rts
  1204. @@:
  1205.     move.l    d1,-(sp)
  1206.     *jbsr    _StpDsk
  1207.     jbsr    _ZeroUnit
  1208.     move.l    (sp),d0
  1209.     jbsr    _SetLUN                *LUN変更 d0=LUN
  1210.     *jbsr    _ejeload            *トレイを出して直ぐ戻す。MBR-7ならいいが・・・
  1211.     clr.w    _TrkNo
  1212.     clr.w    _TrkNoS
  1213.     clr.w    _DtTrak                *1;データトラック有り,-1;データのみ
  1214.     clr.w    _MemMode            *0:ノーマル 1:メモリ
  1215.     clr.w    _MemLong            *メモリながさ 0以外ならMEMORY
  1216.     clr.w    _JukeBox            *0:ノーマル 1:JukeBox
  1217.     move.w    #-1,_MemPt
  1218.     move.w    #-1,_RndPt
  1219.     clr.w    _DisSuuzi10            * LED用数字クリア
  1220.     jbsr    _EJE_EMU
  1221.     clr.w    _AutoMode        *0:ノーマル 1:オート
  1222.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  1223.     bsr    _FlgClrS
  1224.     bsr    _ChkCdRom
  1225.     bsr    _CdListRead
  1226.     move.l    (sp)+,d0
  1227.     bra    tr5_exsub
  1228.  
  1229.  
  1230. tr5_3d:    *--------------------------------------------
  1231. tr5_3e:    *--------------------------------------------
  1232. tr5_3f:    *--------------------------------------------
  1233.     moveq    #-1,d0    *コール無し
  1234.     rts
  1235.  
  1236. tr5_exsub:
  1237.     move.l    d0,-(sp)
  1238.     clr.w    _DisSuuzi10    * LED用数字クリア
  1239.     bsr    FncBarC
  1240.     bsr    FncBar2
  1241.     bsr    FncBar
  1242.     clr.w    _LEDVMOD
  1243.     jbsr    _WaitCC    *今の1/100s
  1244.     addi.w    #300,_KeyTD            *すぐに実行されるように
  1245.     move.l    (sp)+,d0
  1246.     rts
  1247.  
  1248. *---------------------------------------------------
  1249. *
  1250. *    CDC ERROR CORDS
  1251. *
  1252. *
  1253. * -1    ; 
  1254. * -2    ; Play Audio Begin ・ Play Audio Block Count Command error'演奏できない'
  1255. * -3    ; Start Track Address or ReadTOC Command error'演奏できない'
  1256. * -4    ; 指定された曲番号は、存在しない
  1257. * -5    ; Leadout Track Address or ReadTOC Command error
  1258. * -100    ; CD-ROM でない 準備されていない
  1259. *
  1260. *
  1261. *    戻り値としてd0が使われていなくても破壊されます.
  1262. *
  1263. *
  1264. *---------------------------------------------------
  1265. *
  1266. *    CDC バージョンの差
  1267. *
  1268. *
  1269. *    以下のコールは_CDC_VERSIONで得られる数値の$107未満と以降では引数等に違
  1270. *    ってしまっています。ご注意下さい。
  1271. *
  1272. *        _CDC_INKEY    equ    $07
  1273. *        _CDC_LED    equ    $33
  1274. *
  1275. *    以下のコールは_CDC_VERSIONで得られる数値の$108以降新規です。
  1276. *
  1277. *        _CDC_LEDXY    equ    $39
  1278. *
  1279. *    以下のコールは_CDC_VERSIONで得られる数値の$109以降新規です。
  1280. *
  1281. *        _CDC_SCSIID    equ    $3a
  1282. *        _CDC_EJEEMU    equ    $3b
  1283. *        _CDC_CHGLUN    equ    $3b
  1284. *
  1285. *
  1286.